package sgeb;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
  * @file Pago.java
  * @brief Clase Pago
  * @author Borja Molina Zea
  * @date 15 abril 2013
  * @version 0.2
  */

public class Pago {
    //Array con cada una de las mensualidades
    //La posición 0 hace referencia al pago de inscripción
    //Y los 9 restantes a las nueves mensualidades restantes
    private int[] pagos = new int[10];
    
    /**
     * @brief Constructor de la clase Pago. Inicializa todas las mensualidades
     * como no pagadas
     */
    public Pago(){
        for(int i=0; i<10;i++){
            this.pagos[i] = 0;
        }
    }
    
    /**
     * Obtiene de la bd el pago con el id_alumno 'id'
     * @param id id del alumno del que se quiere consultar el pago
     */
    public Pago(int id){
        conectar cc = new conectar();
        Connection cn = cc.conexion();
        String sql="select * from pagos where pagos.alumno_id="+id;
        try{
            Statement st = cn.createStatement();
            ResultSet rs = st.executeQuery(sql);
            /*for(int i=0;rs.next();i++){
                //System.out.println("valor de i="+i);
                
                
                    System.out.println(rs.getInt(3+i));
                    this.pagos[i] = rs.getInt(3+i);
               
            }*/
            while(rs.next()){
            this.pagos[0]=rs.getInt("pagoIni");
            this.pagos[1]=rs.getInt("pago1");
            this.pagos[2]=rs.getInt("pago2");
            this.pagos[3]=rs.getInt("pago3");
            this.pagos[4]=rs.getInt("pago4");
            this.pagos[5]=rs.getInt("pago5");
            this.pagos[6]=rs.getInt("pago6");
            this.pagos[7]=rs.getInt("pago7");
            this.pagos[8]=rs.getInt("pago8");
            this.pagos[9]=rs.getInt("pago9");
            }
        }
        catch(Exception e){System.out.println(e);}
    }
    
    /**
     * @brief Dice si una determinada mensualidad está abonada
     * @param nPago mensualidad a comprobar si está abonada
     * @return 0 si el pago no esta realizado, 1 si lo está.
     * @author Borja Molina Zea
     */
    public int getPago(int nPago){
        return pagos[nPago];
    }
    
    /**
     * @brief Cambia el estado de pago de una de las mensualidades
     * @param nPago Mensualidad a cambiar.
     * @param estadoDelPago 0 no pagado, 1 pagado.
     * @author Borja Molina Zea
     */
    public void setPago(int nPago, int estadoDelPago){
        if(estadoDelPago==0 || estadoDelPago==1){
            this.pagos[nPago] = estadoDelPago;
        }
    }
    
    /**
     * @brief pone todas las mensualidades como pagadas.
     * @author Borja Molina Zea
     */
    public void pagarTodo(){
        for(int i=0; i<10; i++){
            this.pagos[i] = 1;
        }
    }
    
    /**
     * @brief pone todas las mensualidades como no pagadas
     * @author Borja Molina Zea
     */
    public void borrarTodo(){
        for(int i=0; i<10; i++){
            this.pagos[1]=0;
        }
    }
    /**
     * 
     * @param id 
     */
    public void guardarPago(int id){
        conectar cc = new conectar();
        Connection cn = cc.conexion();
        String sql="INSERT INTO pagos (alumno_id, pagoIni, pago1, pago2, pago3, pago4, pago5, pago6, pago7, pago8, pago9) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
        
         try {   
            PreparedStatement pst = cn.prepareStatement(sql);
            
            pst.setInt(1, id);
            for(int i=0; i<10; i++){
                pst.setInt(i+2,this.pagos[i]);
            }
                    
            int n=pst.executeUpdate();
            if (n>0) {
            //JOptionPane.showMessageDialog(null,"registro guardado");
            }
        } 
        catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }     
    }
    
    public void actualizarPago(int id){
        conectar cc = new conectar();
        Connection cn = cc.conexion();
        String sql="update pagos set ";
        sql+="pagoIni="+this.pagos[0];
        for(int i=1;i<10;i++){
            sql+=" ,pago"+i+"="+this.pagos[i];
        }
        sql+=" where alumno_id="+id;
        System.out.println(sql);
         try {   
            PreparedStatement pst = cn.prepareStatement(sql);
            
                    
            int n=pst.executeUpdate();
            if (n>0) {
            //JOptionPane.showMessageDialog(null,"registro guardado");
            }
        } 
        catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }  
        
    }
    
   public void borrarPago(int id){
        conectar cc = new conectar();
        Connection cn = cc.conexion();
        String sql="delete from pagos where alumno_id="+id;
        try{
            PreparedStatement pst = cn.prepareStatement(sql);
            pst.executeUpdate();
        }catch(Exception e){System.out.println(e);}
   } 
   
    public static void main(String[] args){
        Pago a = new Pago(54);
        System.out.println(a.getPago(2));
        //Pago p = new Pago(51);
        //p.setPago(0, 1);
        //System.out.println(p.getPago(0));
        //p.setPago(0, 1);
        //System.out.println(p.getPago(0));
        //System.out.println(p.getPago(9));
        //p.pagarTodo();
        //p.guardarPago(3);
    }
}
